package cl.portal.escolares.sheduler;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import cl.portal.escolares.DAO.DAOApoderado;
import cl.portal.escolares.DAO.DAOPago;
import cl.portal.escolares.DAO.DAOParametro;
import cl.portal.escolares.DAO.DAOUsuario;
import cl.portal.escolares.domain.Apoderado;
import cl.portal.escolares.domain.Pago;
import cl.portal.escolares.domain.Parametro;
import cl.portal.escolares.domain.Usuario;

public class SchedulerJob implements Job {
	private static Log _log = LogFactory.getLog(SchedulerJob.class);

	public void execute(JobExecutionContext context)
			throws JobExecutionException {
		/*
		 * BUSCAR TODOS LOS PAGOS FALSE VER SI LA FECHA DE PAGO ES MENOR A LA
		 * FECHA DE HOY SACAR USUARIO ID Y BUSCAR USUARIO Y CORREO SACAR
		 * APODERADO ID Y BUSCAR APODERADO Y CORREO ENVIAR CORREO A USUARIO Y A
		 * APODERADO INDICANDO QUE NOS E HA REALIZADO EL PAGO
		 */

		SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
		List<Pago> pagosList = new ArrayList<Pago>();
		try {
			pagosList = DAOPago.list(null, null, null, null,
					Constants.PAGO_MENSUALIDAD, null, false, 0L, true);
			_log.info("pagosList.size()=" + pagosList.size());
		} catch (Exception e) {
			_log.error(e);
		}

		for (Pago pl : pagosList) {

			if (diasAtrasados(pl.getFecha()) > 10) {
				_log.info("Pago Atrasado");
				try {
					Apoderado apoderado = DAOApoderado.get(pl.getApoderadoId());
					Usuario usuario = DAOUsuario.get(apoderado.getUsuarioId());
					Parametro para = DAOParametro.get(usuario.getUsuarioId(),
							"mailPagoAtrasado");

					String emailToApoderado = apoderado.getEmail();

					String bodyMessage = "Estimado(a) "
							+ apoderado.getNombres() + " "
							+ apoderado.getApellidos() + " " + para.getValor1()
							+ " " + usuario.getNombreEmpresa() + " "
							+ para.getValor2() + " "
							+ sdf.format(pl.getFecha()) + " "
							+ para.getValor3() + " " + pl.getMonto()
							+ para.getValor4() + " " + usuario.getDireccion()
							+ " " + para.getValor5() + " "
							+ usuario.getTelefono() + " - "
							+ usuario.getCelular() + " " + para.getValor6();

					Mail mailToApoderado = new Mail("logvan.cl@gmail.com",
							"logvanadministracion", emailToApoderado,
							"Recordatorio Pago ", bodyMessage, "1", null);
					_log.info(mailToApoderado.send());

					String emailToUser = DAOUsuario.get(pl.getUsuarioId())
							.getEmail();
					Mail mailToUser = new Mail("logvan.cl@gmail.com",
							"logvanadministracion", emailToUser,
							"Recordatorio Pago a " + apoderado.getNombres()
									+ " " + apoderado.getApellidos(), "", "1",
							null);
//					mailToUser.send();
					pl.setNotificado(1L);
					DAOPago.update(pl);
					_log.info("update pagoId=" + pl.getPagoId());
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}

		System.out.println("Struts 2.3.4 + Quartz 2.1.5");

	}

	private int diasAtrasados(Date fechaPago) {
		long fechaPagoMs = fechaPago.getTime();
		long fechaActualMs = new Date().getTime();
		long diferencia = fechaActualMs - fechaPagoMs;
		double dias = Math.floor(diferencia / (1000 * 60 * 60 * 24));
		return ((int) dias);
	}
}